package com.handpay.framework.swiper;


import android.graphics.Bitmap;

import com.handpay.framework.swiper.ic.IShowSelectApplication;

public interface IApiSwiper extends IShowSelectApplication, SwiperCallback {
    /**
     * 请在开始具体业务的时候，务必设置刷卡器的模式
     * 
     * @param m
     */
    boolean setMode(SwiperMode m);
    boolean isSwiperOK();
    /**
     * 设置业务的具体刷卡器
     * @param swiper
     */
    void setSwiper(IBusinessSwiper swiper);
    /**
     * 获取csn
     * @return
     */
    String getCSN();
    
    

    /**
     * 用于清除每次刷卡器被拔出时.
     * @param swiperType 当swiperType为null。肯定清除。否则，只有当前刷卡器的type与传进来的type一致时，才清除。
     */
    boolean clearSwiper(IPersonalSwiper.SwiperType swiperType);
    /**
     * 退出当前apiSwiper
     * @return
     */
    boolean exit();

    String getFactor();
    /**
     * 用于每次一个交易完成，清除加密的过程因子
     */
    void clearFactor();
    /**
     * 获取用于加密时的时间
     * 
     * @return
     */
    String getFactorTime();

    /**
     * 连接设备,获取csn
     */
    void doDeviceConnect(long listenId);

    /**
     * 注册/绑卡：加密卡号-输入密码
     * 
     * @param
     */
    void doRegisterPwd(String cardNo, long listenId);

    /**
     * 刷卡
     * 
     * @param
     */
    void doSwipe(long listenId);

    /**
     * 输入密码
     * @param listenId
     */
    void doInputPwd(long listenId);

    /**
     * 确认金额-刷卡-输密码
     * 
     * @param amount
     */
    void doAffirmAmount(String amount, long listenId);

    /**
     * MAC计算
     * 
     * @param data
     */
    void doMac(String data, long listenId);

    /**
     * 查询csn关联刷卡器的mac计算
     */
    void doBankListMac(long listenId);

    /**
     * MAC计算
     * 
     * @param data
     */
    void doEncryData(String data, long listenId);
    /**
     * 停止刷卡器当前操作
     * @return
     */
    boolean stopOperation();
    void registerListener(ISwiperListener is);

    void unRegisterListener(ISwiperListener is);

    /**
     * 刷卡器单双密钥
     * @return
     */
//    boolean isSingleKey();

    /**
     * 是否支持确认金额
     * @return true表示支持
     */
    boolean isSupportAffirmAmount();

    /**
     * 获取当前刷卡器与手机的通信类型。蓝牙或音频
     * @return
     */
    IPersonalSwiper.SwiperType getSwiperType();

    /**
     * 获取当前刷卡器与手机的通信类型
     * @return
     */
    SwiperModel getSwiperModel();

    /**
     * 返回设置密码的结果。
     * @param pwd null表示取消；为六位数字字符串为密码明文；其他表示密码密文
     */
    void doSetPwd(String pwd, long listenId);

    /**
     * 当前刷卡器是否支持刷卡器输入密码
     * @return
     */
    boolean isSupportInputPwd();
    /**
     * 刷卡器是否支持打印
     * @return true表示支持, false表示不支持
     */
    boolean isSupportPrint();
    
    /**
     * 打印图片
     * @param position 偏移量
     * @param bitmap 位图
     */
    boolean printBitMap(int position, Bitmap bitmap);
    
    /**
  	 * 打印字符
  	 *
     * @param data
     *            待打印数据
     */
    boolean printString(String data);
  	/**
  	 * 打印字符和图片
  	 * @param data
  	 * @param bitmap
  	 * @return
  	 */
    boolean print(String data, Bitmap bitmap);
    
    
}
